<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Include/gzp/nrf_gzp.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css" />
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="alias.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="alias.js"></script>

<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>



<script type="text/javascript">
  jQuery(document).ready(function () {
    if(gref){ // Number all _img and _table classes
      gref();
    }
  });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->

<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">nRF Gazell
   &#160;<span id="projectnumber">version 0.4.2</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('nrf__gzp_8h.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">Include/gzp/nrf_gzp.h</div>  </div>
</div>
<div class="contents">
<a href="nrf__gzp_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved.</span>
<a name="l00002"></a>00002 <span class="comment">*</span>
<a name="l00003"></a>00003 <span class="comment">* The information contained herein is property of Nordic Semiconductor ASA.</span>
<a name="l00004"></a>00004 <span class="comment">* Terms and conditions of usage are described in detail in NORDIC</span>
<a name="l00005"></a>00005 <span class="comment">* SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. </span>
<a name="l00006"></a>00006 <span class="comment">*</span>
<a name="l00007"></a>00007 <span class="comment">* Licensees are granted free, non-transferable use of the information. NO</span>
<a name="l00008"></a>00008 <span class="comment">* WARRANTY of ANY KIND is provided. This heading must NOT be removed from</span>
<a name="l00009"></a>00009 <span class="comment">* the file.</span>
<a name="l00010"></a>00010 <span class="comment">*</span>
<a name="l00011"></a>00011 <span class="comment">* $LastChangedRevision: 14185 $</span>
<a name="l00012"></a>00012 <span class="comment">*/</span> 
<a name="l00013"></a>00013 
<a name="l00019"></a>00019 <span class="preprocessor">#ifndef __GZP_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define __GZP_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &quot;nrf.h&quot;</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &quot;nrf_gzp_config.h&quot;</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;stdbool.h&gt;</span>
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 
<a name="l00035"></a>00035 <span class="comment">/******************************************************************************/</span>
<a name="l00038"></a>00038 <span class="comment">/******************************************************************************/</span>
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 
<a name="l00041"></a><a class="code" href="group__gzp__02__api.html#ga182a74e6f09944e693cde1be08fdacfc">00041</a> <span class="preprocessor">#define GZP_PAIRING_PIPE 0             ///&lt; Pipe reserved for initial pairing communication.</span>
<a name="l00042"></a><a class="code" href="group__gzp__02__api.html#ga5061300f8d940942b9794fdbcb97b403">00042</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_DATA_PIPE 1                ///&lt; Pipe reserved for GZP encrypted data communication (one pipe only).</span>
<a name="l00043"></a><a class="code" href="group__gzp__02__api.html#ga6ba06ffcdb5c467a19e0a220f30c11db">00043</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_TX_RX_TRANS_DELAY 10       ///&lt; Time to wait between request and fetch packets in RX_PERIODS (2 timeslot periods)</span>
<a name="l00044"></a><a class="code" href="group__gzp__02__api.html#ga50ae5998a3561c07f92f95aa35d9bf61">00044</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_SYSTEM_ADDRESS_WIDTH   4     ///&lt; Must equal Gazell base address length.</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00046"></a>00046 
<a name="l00047"></a><a class="code" href="group__gzp__02__api.html#gacffd37db5819d10e659089277021d55f">00047</a> <span class="preprocessor">#define GZP_VALIDATION_ID {0x32, 0x53, 0x66}                ///&lt; Validation ID. Required to be shared by Host and Device. Not a secret.</span>
<a name="l00048"></a><a class="code" href="group__gzp__02__api.html#ga3fcbd0b9d26bf7c76d375beb57238757">00048</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_VALIDATION_ID_LENGTH 3                          ///&lt; Validation ID length in bytes.</span>
<a name="l00049"></a><a class="code" href="group__gzp__02__api.html#gaf35410042a151241941ca98c33f23b88">00049</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_HOST_ID_LENGTH 5                                ///&lt; Host ID length in bytes.</span>
<a name="l00050"></a><a class="code" href="group__gzp__02__api.html#gac5fd1ba6e4b161953182cfc099d1ad03">00050</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_SESSION_TOKEN_LENGTH GZP_HOST_ID_LENGTH         ///&lt; Session token length in bytes.</span>
<a name="l00051"></a><a class="code" href="group__gzp__02__api.html#ga18cd8f5df0c0a0eee57850d09a452fb6">00051</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_DYN_KEY_LENGTH (16 - GZP_VALIDATION_ID_LENGTH)  ///&lt; Dynamic key length in bytes.</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span>
<a name="l00053"></a>00053 
<a name="l00057"></a>00057 <span class="comment">/******************************************************************************/</span>
<a name="l00060"></a>00060 <span class="comment">/******************************************************************************/</span>
<a name="l00061"></a>00061 
<a name="l00062"></a><a class="code" href="group__gzp__02__api.html#ga52c1cfd2eda5d86a27b710d453c526b3">00062</a> <span class="preprocessor">#define GZP_CMD_HOST_ADDRESS_REQ_PAYLOAD_LENGTH 1   ///&lt; &quot;Host address request&quot; packet, payload length</span>
<a name="l00063"></a>00063 <span class="preprocessor"></span>
<a name="l00064"></a><a class="code" href="group__gzp__02__api.html#ga72f37ba7b90e25d00b4ae2cbfe5d7de2">00064</a> <span class="preprocessor">#define GZP_CMD_HOST_ADDRESS_FETCH_PAYLOAD_LENGTH 1 ///&lt; &quot;Host address fetch&quot; packet, payload length</span>
<a name="l00065"></a>00065 <span class="preprocessor"></span>
<a name="l00066"></a><a class="code" href="group__gzp__02__api.html#ga1bfeb56e6e24c8156db61c0c6719df01">00066</a> <span class="preprocessor">#define GZP_CMD_HOST_ID_REQ_SESSION_TOKEN 1         ///&lt; &quot;Host ID request&quot; packet, session token position</span>
<a name="l00067"></a><a class="code" href="group__gzp__02__api.html#ga9ddbedd035c7dde3d0d4110d184f1157">00067</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_HOST_ID_REQ_PAYLOAD_LENGTH (GZP_CMD_HOST_ID_REQ_SESSION_TOKEN + GZP_SESSION_TOKEN_LENGTH)  ///&lt; &quot;Host ID request&quot; payload length</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span>
<a name="l00069"></a>00069 <span class="preprocessor">#if (GZP_CMD_HOST_ID_REQ_PAYLOAD_LENGTH &gt; 17)</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#error GZP_SESSION_TOKEN_LENGTH too long. </span>
<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span>
<a name="l00073"></a>00073 
<a name="l00074"></a><a class="code" href="group__gzp__02__api.html#ga063e4ea2fe7de7ff03e2bb6f33811325">00074</a> <span class="preprocessor">#define GZP_CMD_HOST_ID_FETCH_VALIDATION_ID 1   ///&lt; &quot;Host ID fetch&quot; packet</span>
<a name="l00075"></a><a class="code" href="group__gzp__02__api.html#gab7d8c0fcac47a02517e8830d56855077">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_HOST_ID_FETCH_PAYLOAD_LENGTH (GZP_CMD_HOST_ID_FETCH_VALIDATION_ID + GZP_VALIDATION_ID_LENGTH) ///&lt; &quot;Host ID fetch&quot; payload length</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span>
<a name="l00077"></a>00077 <span class="preprocessor">#if (GZP_CMD_HOST_ID_FETCH_PAYLOAD_LENGTH &gt; 17)</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#error GZP_VALIDATION_ID_LENGTH set too long. </span>
<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span> 
<a name="l00081"></a><a class="code" href="group__gzp__02__api.html#ga5e563fa9e6f5d3e5a8476ff4d78cf2fa">00081</a> <span class="preprocessor">#define GZP_CMD_KEY_UPDATE_PREPARE_PAYLOAD_LENGTH 1   ///&lt; &quot;Key update prepare&quot; payload length</span>
<a name="l00082"></a>00082 <span class="preprocessor"></span>
<a name="l00083"></a><a class="code" href="group__gzp__02__api.html#ga479c9971d0c8418a52eb75fd8950dbed">00083</a> <span class="preprocessor">#define GZP_CMD_KEY_UPDATE_VALIDATION_ID 1            ///&lt; &quot;Key update&quot; packet, validation ID position</span>
<a name="l00084"></a><a class="code" href="group__gzp__02__api.html#ga5909e15084f425c7cb7a94a13ae9f2ba">00084</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_KEY_UPDATE_NEW_KEY (GZP_CMD_KEY_UPDATE_VALIDATION_ID + GZP_VALIDATION_ID_LENGTH)  ///&lt; &quot;Key update&quot; packet, new key position</span>
<a name="l00085"></a><a class="code" href="group__gzp__02__api.html#gaac13bfd1ba828af3f717a5804568b520">00085</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_KEY_UPDATE_PAYLOAD_LENGTH (GZP_CMD_KEY_UPDATE_NEW_KEY + GZP_DYN_KEY_LENGTH)       ///&lt; &quot;Key update&quot; packet, payload length</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span>
<a name="l00087"></a>00087 <span class="preprocessor">#if (GZP_CMD_KEY_UPDATE_PAYLOAD_LENGTH &gt; 17)</span>
<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#error Sum (GZP_VALIDATION_ID_LENGTH + GZP_DYN_KEY_LENGTH) too high. </span>
<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span>
<a name="l00091"></a>00091 
<a name="l00092"></a><a class="code" href="group__gzp__02__api.html#ga4eebdb5ccff8a3092679717ce2fbad95">00092</a> <span class="preprocessor">#define GZP_CMD_ENCRYPTED_USER_DATA_VALIDATION_ID 1  ///&lt; &quot;Encrypted user data&quot; packet, validation ID position</span>
<a name="l00093"></a><a class="code" href="group__gzp__02__api.html#gaa7bd5f7db3733cfd3574b9c1f4d37c5b">00093</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_ENCRYPTED_USER_DATA_PAYLOAD ((GZP_CMD_ENCRYPTED_USER_DATA_VALIDATION_ID + GZP_VALIDATION_ID_LENGTH)) ///&lt; &quot;Encrypted user data&quot; packet, user data position</span>
<a name="l00094"></a><a class="code" href="group__gzp__02__api.html#gac669b5eb6087018e56e105bae4321a89">00094</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_ENCRYPTED_USER_DATA_PACKET_OVERHEAD ( GZP_CMD_ENCRYPTED_USER_DATA_VALIDATION_ID + GZP_VALIDATION_ID_LENGTH)        ///&lt; &quot;Encrypted user data&quot; packet, packet overhead length</span>
<a name="l00095"></a><a class="code" href="group__gzp__02__api.html#ga669cc0042151389183656fcc270b62cb">00095</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_ENCRYPTED_USER_DATA_MAX_LENGTH (17 - GZP_ENCRYPTED_USER_DATA_PACKET_OVERHEAD) ///&lt; &quot;Encrypted user data&quot; packet, max payload length</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span>
<a name="l00097"></a>00097 <span class="preprocessor">#if(GZP_MAX_FW_PAYLOAD_LENGTH &lt; 17)</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">  #error GZP_MAX_FW_PAYLOAD_LENGTH must be greater or equal to 17.</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span>
<a name="l00101"></a><a class="code" href="group__gzp__02__api.html#gae77600de42fcef5deaa2dffc27345e74">00101</a> <span class="preprocessor">#define GZP_CMD_FETCH_RESP_PAYLOAD_LENGTH 1    ///&lt; General &quot;fetch response&quot; packet, payload_length</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span>
<a name="l00106"></a>00106 <span class="comment">/******************************************************************************/</span>
<a name="l00109"></a>00109 <span class="comment">/******************************************************************************/</span>
<a name="l00110"></a>00110 
<a name="l00111"></a>00111 
<a name="l00112"></a><a class="code" href="group__gzp__02__api.html#ga18628801a88eb1c282775f998d159cc0">00112</a> <span class="preprocessor">#define GZP_CMD_HOST_ADDRESS_RESP_ADDRESS 1      ///&lt; &quot;Host address fetch&quot; response packet, address position</span>
<a name="l00113"></a><a class="code" href="group__gzp__02__api.html#gad9b6ecc88f95c014382564b104517689">00113</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_HOST_ADDRESS_RESP_PAYLOAD_LENGTH (GZP_CMD_HOST_ADDRESS_RESP_ADDRESS + GZP_SYSTEM_ADDRESS_WIDTH) ///&lt;  ///&lt; &quot;Host address fetch&quot; response packet, payload length</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span>
<a name="l00115"></a>00115 <span class="preprocessor">#if(GZP_MAX_ACK_PAYLOAD_LENGTH &lt; GZP_CMD_HOST_ADDRESS_RESP_PAYLOAD_LENGTH)</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">  #error GZP_MAX_ACK_PAYLOAD_LENGTH must be greater or equal to GZP_CMD_HOST_ADDRESS_RESP_PAYLOAD_LENGTH.</span>
<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00118"></a>00118 <span class="preprocessor"></span>
<a name="l00119"></a>00119 
<a name="l00120"></a><a class="code" href="group__gzp__02__api.html#ga4adce983868b4568c6a06b8fc1340b20">00120</a> <span class="preprocessor">#define GZP_CMD_HOST_ID_FETCH_RESP_VALIDATION_ID 1 ///&lt; &quot;Host ID fetch&quot; response packet, validation ID position</span>
<a name="l00121"></a><a class="code" href="group__gzp__02__api.html#gaec0bfafc1920d42985e8132dba546326">00121</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_HOST_ID_FETCH_RESP_STATUS (GZP_CMD_HOST_ID_FETCH_RESP_VALIDATION_ID + GZP_VALIDATION_ID_LENGTH)  ///&lt; &quot;Host ID fetch&quot; response packet, status position</span>
<a name="l00122"></a><a class="code" href="group__gzp__02__api.html#gac8b8df05a07c695bb2564d271170331f">00122</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_HOST_ID_FETCH_RESP_HOST_ID (GZP_CMD_HOST_ID_FETCH_RESP_STATUS + 1)  ///&lt; &quot;Host ID fetch&quot; response packet, Host ID position</span>
<a name="l00123"></a><a class="code" href="group__gzp__02__api.html#ga08c17bcbaf5f24b83f627bd1ae103844">00123</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_HOST_ID_FETCH_RESP_PAYLOAD_LENGTH (GZP_CMD_HOST_ID_FETCH_RESP_HOST_ID + GZP_HOST_ID_LENGTH)   ///&lt; &quot;Host ID fetch&quot; response packet, payload length</span>
<a name="l00124"></a>00124 <span class="preprocessor"></span>
<a name="l00125"></a>00125 <span class="preprocessor">#if(GZP_MAX_ACK_PAYLOAD_LENGTH &lt; GZP_CMD_HOST_ID_FETCH_RESP_PAYLOAD_LENGTH)</span>
<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">  #error GZP_MAX_ACK_PAYLOAD_LENGTH must be greater or equal to GZP_CMD_HOST_ID_FETCH_RESP_PAYLOAD_LENGTH.</span>
<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00128"></a>00128 <span class="preprocessor"></span>
<a name="l00129"></a>00129 
<a name="l00130"></a><a class="code" href="group__gzp__02__api.html#gaa70c4659d3b486579e063568965be3fe">00130</a> <span class="preprocessor">#define GZP_CMD_KEY_UPDATE_PREPARE_RESP_SESSION_TOKEN 1  ///&lt; &quot;Key update prepare&quot; response packet, session token position</span>
<a name="l00131"></a><a class="code" href="group__gzp__02__api.html#ga31baf44d94376a31d67308b4a4f844d1">00131</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_KEY_UPDATE_PREPARE_RESP_PAYLOAD_LENGTH (GZP_CMD_KEY_UPDATE_PREPARE_RESP_SESSION_TOKEN + GZP_SESSION_TOKEN_LENGTH) ///&lt; &quot;Key update prepare&quot; response packet, payload length position</span>
<a name="l00132"></a>00132 <span class="preprocessor"></span>
<a name="l00133"></a>00133 <span class="preprocessor">#if(GZP_MAX_ACK_PAYLOAD_LENGTH &lt; GZP_CMD_KEY_UPDATE_PREPARE_RESP_PAYLOAD_LENGTH)</span>
<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">  #error GZP_MAX_ACK_PAYLOAD_LENGTH must be greater or equal to GZP_CMD_KEY_UPDATE_PREPARE_RESP_PAYLOAD_LENGTH.</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00136"></a>00136 <span class="preprocessor"></span> 
<a name="l00137"></a>00137 
<a name="l00138"></a><a class="code" href="group__gzp__02__api.html#gaad84c1d02372740ccf1b07e73268cc5e">00138</a> <span class="preprocessor">#define GZP_CMD_ENCRYPTED_USER_DATA_RESP_SESSION_TOKEN 1      ///&lt; &quot;Encrypted user data&quot; response packet, session token position</span>
<a name="l00139"></a><a class="code" href="group__gzp__02__api.html#ga92ba501194b56cdb08eaea364ee23c56">00139</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_ENCRYPTED_USER_DATA_RESP_VALIDATION_ID (GZP_CMD_ENCRYPTED_USER_DATA_RESP_SESSION_TOKEN + GZP_SESSION_TOKEN_LENGTH) ///&lt; &quot;Encrypted user data&quot; response packet, validation ID position</span>
<a name="l00140"></a><a class="code" href="group__gzp__02__api.html#gaa0711e1199e7ae89677b40d3322053b7">00140</a> <span class="preprocessor"></span><span class="preprocessor">#define GZP_CMD_ENCRYPTED_USER_DATA_RESP_PAYLOAD_LENGTH (GZP_CMD_ENCRYPTED_USER_DATA_RESP_VALIDATION_ID + GZP_VALIDATION_ID_LENGTH) ///&lt; &quot;Encrypted user data&quot; response packet, payload length position</span>
<a name="l00141"></a>00141 <span class="preprocessor"></span>
<a name="l00142"></a>00142 <span class="preprocessor">#if(GZP_MAX_ACK_PAYLOAD_LENGTH &lt; GZP_CMD_ENCRYPTED_USER_DATA_RESP_PAYLOAD_LENGTH)</span>
<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor">  #error GZP_MAX_ACK_PAYLOAD_LENGTH must be greater or equal to GZP_CMD_ENCRYPTED_USER_DATA_RESP_PAYLOAD_LENGTH.</span>
<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00145"></a>00145 <span class="preprocessor"></span>
<a name="l00146"></a>00146 <span class="preprocessor">#if(GZP_VALIDATION_ID_LENGTH &gt; GZP_HOST_ID_LENGTH)</span>
<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">  #error GZP_HOST_ID_LENGTH should be greater or equal to GZP_VALIDATION_ID_LENGTH.</span>
<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00149"></a>00149 <span class="preprocessor"></span>
<a name="l00150"></a>00150 <span class="preprocessor">#if(GZP_SESSION_TOKEN_LENGTH != GZP_HOST_ID_LENGTH)</span>
<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">  #error GZP_SESSION_TOKEN_LENGTH must equal GZP_HOST_ID_LENGTH.</span>
<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00153"></a>00153 <span class="preprocessor"></span>
<a name="l00154"></a>00154 <span class="preprocessor">#ifdef GZLL_CRYPT_ENABLE</span>
<a name="l00155"></a>00155 <span class="preprocessor"></span><span class="preprocessor">  #error Gazell encryption can not be enabled when using the Gazell pairing library. \</span>
<a name="l00156"></a>00156 <span class="preprocessor">  GZLL_CRYPT_ENABLE must be undefined.</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00158"></a>00158 <span class="preprocessor"></span>
<a name="l00162"></a>00162 <span class="comment">/******************************************************************************/</span>
<a name="l00165"></a>00165 <span class="comment">/******************************************************************************/</span>
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 
<a name="l00172"></a><a class="code" href="group__gzp__02__api.html#ga0556a80b332d4bbbce2475ce86e6df3f">00172</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
<a name="l00173"></a>00173 {
<a name="l00174"></a><a class="code" href="group__gzp__02__api.html#gga0556a80b332d4bbbce2475ce86e6df3faba266e310cf7180b8ed1d680a63aec76">00174</a>   <a class="code" href="group__gzp__02__api.html#gga0556a80b332d4bbbce2475ce86e6df3faba266e310cf7180b8ed1d680a63aec76" title="&quot;Secret key&quot; only">GZP_ID_EXCHANGE</a>,    
<a name="l00175"></a><a class="code" href="group__gzp__02__api.html#gga0556a80b332d4bbbce2475ce86e6df3face965aae3e636886a3a20ac7bcebb5e4">00175</a>   <a class="code" href="group__gzp__02__api.html#gga0556a80b332d4bbbce2475ce86e6df3face965aae3e636886a3a20ac7bcebb5e4" title="&quot;Secret key&quot; and &quot;Host ID&quot;">GZP_KEY_EXCHANGE</a>,   
<a name="l00176"></a><a class="code" href="group__gzp__02__api.html#gga0556a80b332d4bbbce2475ce86e6df3fa0fdbb345d7a7cffa0f5d33d27aadbc8f">00176</a>   <a class="code" href="group__gzp__02__api.html#gga0556a80b332d4bbbce2475ce86e6df3fa0fdbb345d7a7cffa0f5d33d27aadbc8f" title="&quot;Dynamic key&quot; and &quot;Host ID&quot;">GZP_DATA_EXCHANGE</a>   
<a name="l00177"></a>00177 } <a class="code" href="group__gzp__02__api.html#ga0556a80b332d4bbbce2475ce86e6df3f" title="Enumerator used for selecting the key to be used for encryption.">gzp_key_select_t</a>;
<a name="l00178"></a>00178 
<a name="l00179"></a>00179 
<a name="l00185"></a><a class="code" href="group__gzp__02__api.html#ga9f361226afbc586b78ef2f71d2f2d3e0">00185</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
<a name="l00186"></a>00186 {
<a name="l00187"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0aa1786d3611a799488779c6e970c2e3c3">00187</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0aa1786d3611a799488779c6e970c2e3c3" title="Host address request.">GZP_CMD_HOST_ADDRESS_REQ</a> = 0,     
<a name="l00188"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0abdc3cefd52154e54291fc2f00d8c7efe">00188</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0abdc3cefd52154e54291fc2f00d8c7efe" title="Host address fetch.">GZP_CMD_HOST_ADDRESS_FETCH</a>,       
<a name="l00189"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a778c2e2368270ba4aa28caf562368537">00189</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a778c2e2368270ba4aa28caf562368537" title="Host ID request.">GZP_CMD_HOST_ID_REQ</a>,              
<a name="l00190"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a96b914a5a540eecf14281789ff94180e">00190</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a96b914a5a540eecf14281789ff94180e" title="Host ID fetch request.">GZP_CMD_HOST_ID_FETCH</a>,            
<a name="l00191"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0aa8a05e54b39b1d48992ffe178dfd896f">00191</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0aa8a05e54b39b1d48992ffe178dfd896f" title="Key update prepare.">GZP_CMD_KEY_UPDATE_PREPARE</a>,       
<a name="l00192"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a5fea4a9050e98dbf6794e2026a85edd7">00192</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a5fea4a9050e98dbf6794e2026a85edd7" title="Key update.">GZP_CMD_KEY_UPDATE</a>,               
<a name="l00193"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a31ae37999e3ce41fd804fb94488655f4">00193</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a31ae37999e3ce41fd804fb94488655f4" title="Encrypted user data.">GZP_CMD_ENCRYPTED_USER_DATA</a>,      
<a name="l00194"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a99645f1af1c229488420310c520a27c7">00194</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a99645f1af1c229488420310c520a27c7" title="Fetch response.">GZP_CMD_FETCH_RESP</a>,               
<a name="l00195"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a138bd6ac53e0d228f1b8788e8d958873">00195</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a138bd6ac53e0d228f1b8788e8d958873" title="Host address response.">GZP_CMD_HOST_ADDRESS_RESP</a>,        
<a name="l00196"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a60833e51ad70995e2022c00c8a9b50ae">00196</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a60833e51ad70995e2022c00c8a9b50ae" title="Host ID fetch response.">GZP_CMD_HOST_ID_FETCH_RESP</a>,       
<a name="l00197"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a37adb9b73f7abba535ee08b3a71d5dda">00197</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0a37adb9b73f7abba535ee08b3a71d5dda" title="Key update prepare.">GZP_CMD_KEY_UPDATE_PREPARE_RESP</a>,  
<a name="l00198"></a><a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0ac78d9e06d9021b21f0cf9a9588814864">00198</a>   <a class="code" href="group__gzp__02__api.html#gga9f361226afbc586b78ef2f71d2f2d3e0ac78d9e06d9021b21f0cf9a9588814864" title="Encrypted user data response.">GZP_CMD_ENCRYPTED_USER_DATA_RESP</a>, 
<a name="l00199"></a>00199 } <a class="code" href="group__gzp__02__api.html#ga9f361226afbc586b78ef2f71d2f2d3e0" title="Enumerator used in the first payload byte of each packet to indicate the packet type.">gzp_cmd_t</a>;
<a name="l00200"></a>00200 
<a name="l00201"></a>00201 
<a name="l00207"></a><a class="code" href="group__gzp__02__api.html#ga460dd99921f6d26ea5dc52f56c945b52">00207</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
<a name="l00208"></a>00208 {
<a name="l00209"></a><a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52ab51f874fa9692b24ac18f9536a14914b">00209</a>   <a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52ab51f874fa9692b24ac18f9536a14914b" title="ID response pending.">GZP_ID_RESP_PENDING</a>,   
<a name="l00210"></a><a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a1d29b203c80fc64360929d55a5cdae38">00210</a>   <a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a1d29b203c80fc64360929d55a5cdae38" title="ID response granted.">GZP_ID_RESP_GRANTED</a>,   
<a name="l00211"></a><a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a102d54e19b17d381c3bc7bcf97b14f16">00211</a>   <a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a102d54e19b17d381c3bc7bcf97b14f16" title="ID response rejected.">GZP_ID_RESP_REJECTED</a>,  
<a name="l00212"></a><a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a41000e655f952a6055b2aca3283a453d">00212</a>   <a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a41000e655f952a6055b2aca3283a453d" title="ID response failed.">GZP_ID_RESP_FAILED</a>,    
<a name="l00213"></a><a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a820b18e010210a5b7792369ab7db90ce">00213</a>   <a class="code" href="group__gzp__02__api.html#gga460dd99921f6d26ea5dc52f56c945b52a820b18e010210a5b7792369ab7db90ce" title="Default value. No ID request has yet been.">GZP_ID_RESP_NO_REQUEST</a> 
<a name="l00214"></a>00214 } <a class="code" href="group__gzp__02__api.html#ga460dd99921f6d26ea5dc52f56c945b52" title="Enumerator used to identify the state of the current Host ID request.">gzp_id_req_res_t</a>;
<a name="l00215"></a>00215 
<a name="l00216"></a>00216 
<a name="l00220"></a>00220 <span class="comment">/******************************************************************************/</span>
<a name="l00223"></a>00223 <span class="comment">/******************************************************************************/</span>
<a name="l00224"></a>00224 
<a name="l00230"></a>00230 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gadcea82d07590c71cc8cc07b6133638a7">gzp_crypt_set_session_token</a>(<span class="keyword">const</span> uint8_t *token);
<a name="l00231"></a>00231 
<a name="l00232"></a>00232 
<a name="l00238"></a>00238 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gab8b2d42a795185e9dd970d5ab988fa67">gzp_crypt_get_session_token</a>(uint8_t *dst_token);
<a name="l00239"></a>00239 
<a name="l00240"></a>00240 
<a name="l00246"></a>00246 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gab4e21e991abe75ebf2ae3a765be0cb06">gzp_crypt_set_dyn_key</a>(<span class="keyword">const</span> uint8_t* dyn_key);
<a name="l00247"></a>00247 
<a name="l00248"></a>00248 
<a name="l00254"></a>00254 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga26a6e65daa12818457e9626fdfcdc16d">gzp_crypt_get_dyn_key</a>(uint8_t *dst_key);
<a name="l00255"></a>00255 
<a name="l00256"></a>00256 
<a name="l00262"></a>00262 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga716af0575504167733f3b67da3c24511">gzp_set_host_id</a>(<span class="keyword">const</span> uint8_t* src);
<a name="l00263"></a>00263 
<a name="l00264"></a>00264 
<a name="l00270"></a>00270 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga5db495082721e37dc1302f85834d9230">gzp_get_host_id</a>(uint8_t *dst);
<a name="l00271"></a>00271 
<a name="l00272"></a>00272 
<a name="l00279"></a>00279 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga03aa1e17eeb6b04caba05da3f3c44616">gzp_crypt_select_key</a>(<a class="code" href="group__gzp__02__api.html#ga0556a80b332d4bbbce2475ce86e6df3f" title="Enumerator used for selecting the key to be used for encryption.">gzp_key_select_t</a> key_select);
<a name="l00280"></a>00280 
<a name="l00281"></a>00281 
<a name="l00294"></a>00294 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gaab80c20738dc7bebba95704536e82e38">gzp_crypt</a>(uint8_t* dst, <span class="keyword">const</span> uint8_t* src, uint8_t length);
<a name="l00295"></a>00295 
<a name="l00296"></a>00296 
<a name="l00305"></a>00305 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#ga288cb74335df9d0f81f29b632a27c254">gzp_validate_id</a>(<span class="keyword">const</span> uint8_t *src_id);
<a name="l00306"></a>00306 
<a name="l00307"></a>00307 
<a name="l00314"></a>00314 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gafdf97aef9c54208cde14f91206d4fd3a">gzp_add_validation_id</a>(uint8_t *dst_id);
<a name="l00315"></a>00315 
<a name="l00316"></a>00316 
<a name="l00323"></a>00323 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga739fa1981fe1606f79dfbc305652e50c">gzp_random_numbers_generate</a>(uint8_t *dst, uint8_t n);
<a name="l00324"></a>00324 
<a name="l00325"></a>00325 
<a name="l00340"></a>00340 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#ga6c2fd95c5a3c45e1a3bceebf72f5c990">gzp_update_radio_params</a>(<span class="keyword">const</span> uint8_t *system_address);
<a name="l00341"></a>00341 
<a name="l00342"></a>00342 
<a name="l00351"></a>00351 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga3cb2e9557ff22e0c6dfe552e59e226cc">gzp_generate_channels</a>(uint8_t *ch_dst, <span class="keyword">const</span> uint8_t * address, uint8_t channel_set_size);
<a name="l00352"></a>00352 
<a name="l00353"></a>00353 
<a name="l00362"></a>00362 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga2b720c2fcfa4a0df48da14d88e58fe67">gzp_xor_cipher</a>(uint8_t* dst, <span class="keyword">const</span> uint8_t* src, <span class="keyword">const</span> uint8_t* pad, uint8_t length);
<a name="l00363"></a>00363 
<a name="l00364"></a>00364 
<a name="l00365"></a>00365 <span class="comment">/******************************************************************************/</span>
<a name="l00368"></a>00368 <span class="comment">/******************************************************************************/</span>
<a name="l00369"></a>00369 
<a name="l00370"></a>00370 
<a name="l00378"></a>00378 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gae0c59c904a0ea56323274885ac3da45a">gzp_init</a>(<span class="keywordtype">void</span>);
<a name="l00379"></a>00379 
<a name="l00386"></a>00386 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga9da69761034ee9fa836e14cb4f08ada3">gzp_id_req_cancel</a>(<span class="keywordtype">void</span>);
<a name="l00387"></a>00387 
<a name="l00412"></a>00412 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#gaf0789378179910143ee80f7fc54eeede">gzp_address_req_send</a>(<span class="keywordtype">void</span>);
<a name="l00413"></a>00413 
<a name="l00441"></a>00441 <a class="code" href="group__gzp__02__api.html#ga460dd99921f6d26ea5dc52f56c945b52" title="Enumerator used to identify the state of the current Host ID request.">gzp_id_req_res_t</a> <a class="code" href="group__gzp__02__api.html#ga9304b33edaf45fbb4f00c3810ff5ee91">gzp_id_req_send</a>(<span class="keywordtype">void</span>);
<a name="l00442"></a>00442 
<a name="l00458"></a>00458 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#ga4994083175f26dbffef2d1c934a01248">gzp_crypt_data_send</a>(<span class="keyword">const</span> uint8_t *src, uint8_t length);
<a name="l00459"></a>00459 
<a name="l00465"></a>00465 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga8078977f492aab495d8228445e1156ca">nrf_gzp_flush_rx_fifo</a>(uint32_t pipe);
<a name="l00466"></a>00466 
<a name="l00487"></a>00487 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gaa00479ce99d1b3f598e02562b1bc5f20">gzp_pairing_enable</a>(<span class="keywordtype">bool</span> enable);
<a name="l00488"></a>00488 
<a name="l00494"></a>00494 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#gaedcecd51c981397d95b28409ce8caad6">gzp_host_execute</a>(<span class="keywordtype">void</span>);
<a name="l00495"></a>00495 
<a name="l00503"></a>00503 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#ga0ed91ce26125fb5ce911d8966e816362">gzp_address_exchanged</a>(<span class="keywordtype">void</span>);
<a name="l00504"></a>00504 
<a name="l00521"></a>00521 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#ga66b2bebd71fc8007817cfe6d71d330d8">gzp_id_req_received</a>(<span class="keywordtype">void</span>);
<a name="l00522"></a>00522 
<a name="l00531"></a>00531 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga935eef34ede1692180b77d090726b10d">gzp_id_req_reject</a>(<span class="keywordtype">void</span>);
<a name="l00532"></a>00532 
<a name="l00541"></a>00541 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga587ecf4915c37fc22dbb6354931d2386">gzp_id_req_grant</a>(<span class="keywordtype">void</span>);
<a name="l00542"></a>00542 
<a name="l00549"></a>00549 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#gab5a1932563fe2b3c2a0712fe7baa46e3">gzp_crypt_user_data_received</a>(<span class="keywordtype">void</span>);
<a name="l00550"></a>00550 
<a name="l00565"></a>00565 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#ga6e357d81ff267ff79ad6bd462eff1ec0">gzp_crypt_user_data_read</a>(uint8_t* dst, uint8_t* length);
<a name="l00566"></a>00566 
<a name="l00573"></a>00573 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#gadf63c23bec2d64dc9b977ab3ae2b8ed7">nrf_gzp_tx_complete</a>(<span class="keywordtype">void</span>);
<a name="l00574"></a>00574 
<a name="l00581"></a>00581 <span class="keywordtype">bool</span> <a class="code" href="group__gzp__02__api.html#ga3c190ed94ee45206295f804b7ff284a9">nrf_gzp_tx_success</a>(<span class="keywordtype">void</span>);
<a name="l00582"></a>00582 
<a name="l00583"></a>00583 <span class="keywordtype">void</span> nrf_gzp_tx_success_cb(uint32_t pipe);
<a name="l00584"></a>00584 
<a name="l00588"></a>00588 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga6fc690423c7b8872e8f36bd678223261">nrf_gzp_reset_tx_complete</a>(<span class="keywordtype">void</span>);
<a name="l00589"></a>00589 
<a name="l00593"></a>00593 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga633c491a4e8904940b2341605f7a5c44">nrf_gzp_reset_tx_success</a>(<span class="keywordtype">void</span>);
<a name="l00594"></a>00594 
<a name="l00598"></a>00598 <span class="keywordtype">void</span> <a class="code" href="group__gzp__02__api.html#ga82d40c440e1f046de35269527cece57b">nrf_gzp_disable_gzll</a>(<span class="keywordtype">void</span>);
<a name="l00599"></a>00599 
<a name="l00600"></a>00600 
<a name="l00601"></a>00601 
<a name="l00602"></a>00602 
<a name="l00607"></a>00607 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="nrf__gzp_8h.html">nrf_gzp.h</a>      </li>

    <li class="footer">
      Copyright &copy 2006-2011 <a href="http://www.nordicsemi.no" style="text-decoration:none">Nordic Semiconductor</a>.
      All Rights Reserved.
      <a href="disclaimer.html">Disclaimer</a>
    </li>
   </ul>
 </div>


</body>
</html>
